package com.sinosoft.dsp.persistence.businessconcept.facade;

import java.util.Calendar;
import java.util.List;

import com.sinosoft.builder.templates.concept.CodeValueObjectRef;
import com.sinosoft.builder.templates.concept.NamingElement;
import com.sinosoft.dsp.platform.components.portal.iteration.ISinoTreeDataObject;

public interface ICodeFacade extends ISinoTreeDataObject {
	
	public static final String CODE_NODE_TYPE = "code";
	
	public static final String CODE_NODE_TYPE_IMG = "ui-icon ui-icon-document";

	/**
	 * 设置名称定义
	 * 
	 * @param names
	 *            名称定义集合
	 * @return
	 */
	public ICodeFacade setNamingElement(List<NamingElement> names);

	/**
	 * 设置值引用集合
	 * 
	 * @param ref
	 *            值引用集合
	 * @return
	 */
	public ICodeFacade setCodeValueObjectRef(List<CodeValueObjectRef> ref);

	/**
	 * 通过日期获得名称
	 * 
	 * @param date
	 * @return
	 */
	public String getName(Calendar date);

	/**
	 * 通过日期获得详细描述
	 * 
	 * @param date
	 * @return
	 */
	public String getAlt(Calendar date);

	/**
	 * 获得命名元素对象
	 * 
	 * @return
	 */
	public NamingElement getNamingElement();

	/**
	 * 通过日期获得命名元素对象
	 * 
	 * @param date
	 * @return
	 */
	public NamingElement getNamingElement(Calendar date);

	/**
	 * 通过日期判断对象是否有效
	 * 
	 * @param date
	 * @return
	 */
	public Boolean isValid(Calendar date);

	/**
	 * 通过日期获得代码值
	 * 
	 * @param date
	 * @return
	 */
	public String getValue(Calendar date);

	/**
	 * 获得代码值对象唯一引用
	 * 
	 * @return
	 */
	public CodeValueObjectRef getCodeValueObjectRef();

	/**
	 * 通过日期获得代码值对象唯一引用
	 * 
	 * @param date
	 * @return
	 */
	public CodeValueObjectRef getCodeValueObjectRef(Calendar date);

	/**
	 * 获得有效的代码值对象引用集合
	 * 
	 * @return
	 */
	public CodeValueObjectRef[] getValidCodeValueObjectRef();

	/**
	 * 通过日期获得有效的代码值对象引用集合
	 * 
	 * @param date
	 * @return
	 */
	public CodeValueObjectRef[] getValidCodeValueObjectRef(Calendar date);

	/**
	 * 获得所有值引用
	 * 
	 * @return
	 */
	public List<CodeValueObjectRef> getRefs();

	/**
	 * 获得所有命名
	 * 
	 * @return
	 */
	public List<NamingElement> getNames();

	/**
	 * 创建树形值对象
	 * 
	 * @return
	 */
	public ISinoTreeDataObject createTreeDataObject();

	/**
	 * 通过日期创建树形值对象
	 * 
	 * @param date
	 * @return
	 */
	public ISinoTreeDataObject createTreeDataObject(Calendar date);
}
